/**
 * @Description: qiankun 全局数据状态事件统一处理
 *
 * @author: liuxiuqian
 *
 * @date: 2020/6/9
 */

function emptyAction() {
  console.warn("Current execute action is empty!");
}

// 应用单独运行时的假数据
const initState = {

}

class Actions {

  constructor() {
    this.isqiankun = false; // 是否注册 qiankun
  }

  actions = {
    getGlobalState: emptyAction,
    setGlobalState: emptyAction,
    delGlobalState: emptyAction
  };

  // 注册事件方法，一般在入口文件 调用一次
  setActions(actions) {
    this.isqiankun = true;
    this.actions = actions;
  }

  getGlobalState(args) {
    console.log(this.actions)
    const globalState = this.actions.getGlobalState();
    if(this.isqiankun){
      // 判断是否为空 为空直接返回所有数据
      // eslint-disable-next-line no-void
      if(args === void 0){
        return globalState
      }
      // 获取单个值
      if(typeof(args) === 'string'){
        return args in globalState ? globalState[args] : ""
      }
      // 多参数数组的形式传入
      if(Array.isArray(args)){
        const reObj = {}
        args.forEach((item)=>{
          if(item in globalState){
            reObj[item] = globalState[item]
          }
        })
        return reObj;
      }
      // 查不到返回空
      return ""
    }
    // 如果没有注册 qiankun 则返货假数据
    return initState;
  }

  setGlobalState(args) {
    if(this.isqiankun){
      this.actions.setGlobalState(args);
    }else {
      console.warn("globalState no register");
    }
  }
}

const actions = new Actions();
export default actions;
